package com.cpd.blog.service;

import com.cpd.blog.entity.User;
import com.cpd.blog.dto.Result;
import com.cpd.blog.dto.User.UserVo;

/**
 * @Author: Copydown
 * @Date: 2022/05/22 16:09
 */
public interface UserService {

    User findUserById(Long id);

    UserVo findUserVoById(Long id);

    /**
     * 用户登陆后的状态修改
     *
     * @param user user
     * @return Token
     */
    String updateUserLogin(User user);

    /**
     * 校验用户名密码是否正确
     *
     * @param user     user
     * @param password password
     * @return boolean
     */
    boolean checkUserPwd(User user, String password);

    /**
     * 根据 token 查询 User
     *
     * @param token token
     * @return Result
     */
    Result findUserByToken(String token);

    /**
     * 根据账户查找用户
     *
     * @param account
     * @return
     */
    User findUserByAccount(String account);

    /**
     * 保存用户到数据库
     *
     * @param user
     */
    void save(User user);

    /**
     * 通过token 查找用户
     *
     * @param token token
     * @return UserVo
     */
    UserVo getUserVoByToken(String token);

    /**
     * TODO:不改写在这的 token校验
     *
     * @param token token
     * @return User
     */
    UserVo checkToken(String token);

    /**
     * 修改用户昵称
     *
     * @param name name
     * @return Result
     */
    Result editNickName(String name);

    /**
     * 当前用户个人信息卡片
     *
     * @param token token
     * @return Result
     */
    Result mineCard(String token);

    /**
     * 修改用户密码
     *
     * @param password 密码
     * @param emailCode 邮箱验证码
     * @return Result
     */
    Result editPassword(String password, String emailCode);

    /**
     * 发送邮箱验证码
     *
     * @return Result
     */
    Result sendEmail();
}
